﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WatiN.Core;
using WatiN.Core.DialogHandlers;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using tea.DB;
using tea.BL;
using Util;


namespace tea.Tests
{
    [TestClass]
    public class 채용관리
    {
        [ClassInitialize]
        public static void DB테스트준비(TestContext context)
        {
            DB.초기화();
        }

        [TestMethod]
        public void 채용관리테스트1()
        {
            string s;
            IE ie = new IE("http://localhost:6378/Guest/Login?ReturnUrl=%2f");

            // 로그인하고
            로그인.로그인하기("staff", "staff", ie);

            // 채용관리 화면으로 이동
            ie.Link(Find.ByText("채용 목록")).Click();

            // 신규채용 등록 (기간: 한달 전부터 오늘까지)
            ie.Link(Find.BySelector(".btn-primary")).Click();
            Assert.IsTrue(ie.Url.Contains("/Recruit/New"));
            ie.TextField(Find.ByName("임용년도")).Value = "2014";
            ie.TextField(Find.ByName("신청기간1")).Value = DateTime.Now.AddMonths(-1).ToYMD();
            ie.TextField(Find.ByName("신청기간2")).Value = DateTime.Now.ToYMD();
            ie.Link(Find.BySelector(".btn-primary")).Click();

            // 진행중 상태, 목록에서 확인
            Assert.IsTrue(ie.Url.Contains("/Recruit/List"));
            s = ie.Eval("$('tbody').html()");
            Assert.IsTrue(s.Contains("<td>1</td>"));
            Assert.IsTrue(s.Contains("<td>2014</td>"));
            Assert.IsTrue(s.Contains(DateTime.Now.AddMonths(-1).ToYMD()));
            Assert.IsTrue(s.Contains(DateTime.Now.ToYMD()));
            Assert.IsTrue(s.Contains("<td>진행중</td>"));
            Assert.IsTrue(s.Contains("<td>0</td>"));

            // 날짜 수정 (한달전부터 어제까지)
            ie.TableRow(Find.BySelector("tbody tr:nth-child(1)")).Click();
            ie.TextField(Find.ByName("신청기간1")).Value = DateTime.Now.AddMonths(-1).ToYMD();
            ie.TextField(Find.ByName("신청기간2")).Value = DateTime.Now.AddDays(-1).ToYMD();
            ie.Link(Find.BySelector(".btn-primary")).Click();

            // 마감 상태, 목록에서 확인
            Assert.IsTrue(ie.Url.Contains("/Recruit/List"));
            s = ie.Eval("$('tbody').html()");
            Assert.IsTrue(s.Contains("<td>1</td>"));
            Assert.IsTrue(s.Contains("<td>2014</td>"));
            Assert.IsTrue(s.Contains(DateTime.Now.AddMonths(-1).ToYMD()));
            Assert.IsTrue(s.Contains(DateTime.Now.AddDays(-1).ToYMD()));
            Assert.IsTrue(s.Contains("<td>마감</td>"));
            Assert.IsTrue(s.Contains("<td>0</td>"));

            // 날짜 수정 (내일부터 다음달까지)
            ie.TableRow(Find.BySelector("tbody tr:nth-child(1)")).Click();
            ie.TextField(Find.ByName("신청기간1")).Value = DateTime.Now.AddDays(1).ToYMD();
            ie.TextField(Find.ByName("신청기간2")).Value = DateTime.Now.AddMonths(1).ToYMD();
            ie.Link(Find.BySelector(".btn-primary")).Click();

            // 시작전 상태 목록에서 확인
            Assert.IsTrue(ie.Url.Contains("/Recruit/List"));
            s = ie.Eval("$('tbody').html()");
            Assert.IsTrue(s.Contains("<td>1</td>"));
            Assert.IsTrue(s.Contains("<td>2014</td>"));
            Assert.IsTrue(s.Contains(DateTime.Now.AddDays(1).ToYMD()));
            Assert.IsTrue(s.Contains(DateTime.Now.AddMonths(1).ToYMD()));
            Assert.IsTrue(s.Contains("<td>시작전</td>"));
            Assert.IsTrue(s.Contains("<td>0</td>"));

            // 삭제
            ie.TableRow(Find.BySelector("tbody tr:nth-child(1)")).Click();
            ie.컨펌버튼누르기(" 삭제");
            ie.WaitAjax();
            Assert.IsTrue(ie.Url.Contains("/Recruit/List"));
            Assert.AreEqual(ie.Eval("$('tbody tr').length"), "0");

            ie.WaitForComplete();
            ie.Dispose();
        }

        [TestMethod]
        public void 채용관리테스트2()
        {
            string s;
            IE ie = new IE("http://localhost:6378/Guest/Login?ReturnUrl=%2f");

            // 로그인하고
            로그인.로그인하기("staff", "staff", ie);

            // 채용관리 화면으로 이동
            ie.Link(Find.ByText("채용 목록")).Click();

            // 신규채용 등록 (기간: 한달 전부터 오늘까지)
            ie.Link(Find.BySelector(".btn-primary")).Click();
            Assert.IsTrue(ie.Url.Contains("/Recruit/New"));
            ie.TextField(Find.ByName("임용년도")).Value = "2014";
            ie.TextField(Find.ByName("신청기간1")).Value = DateTime.Now.AddMonths(-1).ToYMD();
            ie.TextField(Find.ByName("신청기간2")).Value = DateTime.Now.ToYMD();
            ie.Link(Find.BySelector(".btn-primary")).Click();

            // 진행중 상태, 목록에서 확인
            Assert.IsTrue(ie.Url.Contains("/Recruit/List"));
            s = ie.Eval("$('tbody').html()");
            Assert.IsTrue(s.Contains("<td>1</td>"));
            Assert.IsTrue(s.Contains("<td>2014</td>"));
            Assert.IsTrue(s.Contains(DateTime.Now.AddMonths(-1).ToYMD()));
            Assert.IsTrue(s.Contains(DateTime.Now.ToYMD()));
            Assert.IsTrue(s.Contains("<td>진행중</td>"));
            Assert.IsTrue(s.Contains("<td>0</td>"));

            // 지원자 추가
            for (int i = 1; i <= 31; ++i) {
                DB.사용자생성("test" + i, "test", "테스트" + i, "test@test.com");
                DB.이력서생성("test" + i, "1980-01-" + ("0" + i).Right(2), i % 2 == 0 ? "여" : "남");
                DB.이력서학력생성("test" + i, "학사", "한국", "2010-01", "2010-02", "성공회대", "소프");
                DB.지원생성("test" + i);
            }

            // 지원자 있으면 삭제 불가
            ie.TableRow(Find.BySelector("tbody tr:nth-child(1)")).Click();
            ie.컨펌버튼누르고메시지확인(" 삭제", "지원");

            // 목록으로
            ie.Link(Find.ByText(" 목록으로")).Click();
            Assert.IsTrue(ie.Url.Contains("/Recruit/List"));
            s = ie.Eval("$('tbody').html()");
            Assert.IsTrue(s.Contains("<td>진행중</td>"));
            Assert.IsTrue(s.Contains("<td>31</td>"));

            // 지원자목록 보기
            ie.Link(Find.ByText(" 지원자 보기")).Click();

            // 보고서 팝업
            ie.Link(Find.ByText(" 전체 목록 출력")).Click();
            IE ie2 = IE.AttachTo<IE>(Find.ByTitle("명단"));
            System.Threading.Thread.Sleep(1000);
            ie2.WaitForComplete();

            Assert.IsTrue(ie2.ContainsText("생년월일"));
            Assert.IsTrue(ie2.ContainsText("최종학위"));
            Assert.IsTrue(ie2.ContainsText("테스트1"));

            ie.Link(Find.ByText(" 전체 이력서 출력")).Click();
            IE ie3 = IE.AttachTo<IE>(Find.ByTitle("이력서"));
            ie2.WaitForComplete();
            ie2.Dispose();
            ie3.WaitForComplete();

            Assert.IsTrue(ie3.ContainsText("인적사항"));
            Assert.IsTrue(ie3.ContainsText("테스트1"));

            ie.Link(Find.ByText(" 전체 심사서 출력")).Click();
            IE ie4 = IE.AttachTo<IE>(Find.ByTitle("서류심사"));
            ie3.WaitForComplete();
            ie3.Dispose();
            ie4.WaitForComplete();

            Assert.IsTrue(ie4.ContainsText("서류심사"));
            Assert.IsTrue(ie4.ContainsText("테스트1"));

            ie4.WaitForComplete();
            ie4.Dispose();

            // 지원자 승인 테스트
            ie.Link(Find.ByText("지원자 승인")).Click();

            Assert.AreEqual(ie.Eval("$('tbody tr td:nth-child(3):empty').length"), "31");
            ie.Link(Find.ByText("전체선택")).Click();
            ie.Link(Find.ByText("승인")).Click();
            ie.WaitAjax();

            Assert.AreEqual(ie.Eval("$('tbody tr td:nth-child(3):empty').length"), "0");
            ie.Link(Find.ByText("전체선택")).Click();
            ie.Link(Find.ByText("승인취소")).Click();
            ie.WaitAjax();

            Assert.AreEqual(ie.Eval("$('tbody tr td:nth-child(3):empty').length"), "31");


            ie.WaitForComplete();
            ie.Dispose();
        }

    }
}


